package fr.thelem.gestiondemandesthelem.dao.model;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

/**
 * Entity implementation class for Entity: DemandeAdmin
 * 
 */
@Entity
@Table(name = "CD_DEMANDE", uniqueConstraints = {@UniqueConstraint(columnNames = {"NOM_CD_DEMANDE", "IDENTIFIANT_SOUS_CATEGORIE"})})
public class CDDemandeEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    @Column(name = "IDENTIFIANT_CD_DEMANDE")
    private int identifiantCDDemande;

    @Column(name = "NOM_CD_DEMANDE")
    private String nomCDDemande;

    @ManyToOne
    @JoinColumn(name = "IDENTIFIANT_TYPE_DEMANDE")
    private TypeDemandeEntity typeDemandeCDDemande;

    @ManyToOne
    @JoinColumn(name = "IDENTIFIANT_SOUS_CATEGORIE")
    private SousCategorieEntity sousCategorieCDDemande;

    @ManyToMany
    @JoinTable(name = "CD_DEMANDE_PARAMETRE", joinColumns = {@JoinColumn(name = "IDENTIFIANT_CD_DEMANDE")}, inverseJoinColumns = {@JoinColumn(name = "IDENTIFIANT_CD_PARAMETRE_DEMANDE")})
    private Collection<CDParametreDemandeEntity> CDParametresDemandeCDDemande;

    @ManyToMany
    @JoinTable(name = "CD_POINT_DE_CONTROLE_CORRESPONDANT_DEMANDE", joinColumns = {@JoinColumn(name = "IDENTIFIANT_CD_DEMANDE")}, inverseJoinColumns = {@JoinColumn(name = "IDENTIFIANT_CD_POINT_DE_CONTROLE")})
    private Collection<CDPointDeControleEntity> CDPointsDeControleCDDemande;

    @ManyToMany
    @JoinTable(name = "CD_PASSER", joinColumns = {@JoinColumn(name = "IDENTIFIANT_CD_DEMANDE")}, inverseJoinColumns = {@JoinColumn(name = "IDENTIFIANT_CD_ETAPE")})
    private Collection<CDEtapeEntity> CDEtapesCDDemande;

    @OneToMany(mappedBy = "CDDemandeCPDemande")
    private Collection<CPDemandeEntity> CPDemandesCDDemande;

    /**
     * Constructeur
     */
    public CDDemandeEntity() {
        super();
        this.CDParametresDemandeCDDemande = new HashSet<CDParametreDemandeEntity>();
        this.CDPointsDeControleCDDemande = new HashSet<CDPointDeControleEntity>();
        this.CDEtapesCDDemande = new HashSet<CDEtapeEntity>();
        this.CPDemandesCDDemande = new HashSet<CPDemandeEntity>();
    }

    /**
     * Accesseur de identifiantCDDemande
     * 
     * @return le identifiantCDDemande
     */
    public int getIdentifiantCDDemande() {
        return identifiantCDDemande;
    }

    /**
     * Affectation de identifiantCDDemande
     * 
     * @param identifiantCDDemande identifiantCDDemande à affecter
     */
    public void setIdentifiantCDDemande(int identifiantCDDemande) {
        this.identifiantCDDemande = identifiantCDDemande;
    }

    /**
     * Accesseur de nomCDDemande
     * 
     * @return le nomCDDemande
     */
    public String getNomCDDemande() {
        return nomCDDemande;
    }

    /**
     * Affectation de nomCDDemande
     * 
     * @param nomCDDemande nomCDDemande à affecter
     */
    public void setNomCDDemande(String nomCDDemande) {
        this.nomCDDemande = nomCDDemande;
    }

    /**
     * Accesseur de typeDemandeCDDemande
     * 
     * @return le typeDemandeCDDemande
     */
    public TypeDemandeEntity getTypeDemandeCDDemande() {
        return typeDemandeCDDemande;
    }

    /**
     * Affectation de typeDemandeCDDemande
     * 
     * @param typeDemandeCDDemande typeDemandeCDDemande à affecter
     */
    public void setTypeDemandeCDDemande(TypeDemandeEntity typeDemandeCDDemande) {
        this.typeDemandeCDDemande = typeDemandeCDDemande;
    }

    /**
     * Accesseur de sousCategorieCDDemande
     * 
     * @return le sousCategorieCDDemande
     */
    public SousCategorieEntity getSousCategorieCDDemande() {
        return sousCategorieCDDemande;
    }

    /**
     * Affectation de sousCategorieCDDemande
     * 
     * @param sousCategorieCDDemande sousCategorieCDDemande à affecter
     */
    public void setSousCategorieCDDemande(SousCategorieEntity sousCategorieCDDemande) {
        this.sousCategorieCDDemande = sousCategorieCDDemande;
    }

    /**
     * Accesseur de cDParametresDemandeCDDemande
     * 
     * @return le cDParametresDemandeCDDemande
     */
    public Collection<CDParametreDemandeEntity> getCDParametresDemandeCDDemande() {
        return CDParametresDemandeCDDemande;
    }

    /**
     * Affectation de cDParametresDemandeCDDemande
     * 
     * @param cDParametresDemandeCDDemande cDParametresDemandeCDDemande à affecter
     */
    public void setCDParametresDemandeCDDemande(Collection<CDParametreDemandeEntity> cDParametresDemandeCDDemande) {
        CDParametresDemandeCDDemande = cDParametresDemandeCDDemande;
    }

    /**
     * Accesseur de cDPointsDeControleCDDemande
     * 
     * @return le cDPointsDeControleCDDemande
     */
    public Collection<CDPointDeControleEntity> getCDPointsDeControleCDDemande() {
        return CDPointsDeControleCDDemande;
    }

    /**
     * Affectation de cDPointsDeControleCDDemande
     * 
     * @param cDPointsDeControleCDDemande cDPointsDeControleCDDemande à affecter
     */
    public void setCDPointsDeControleCDDemande(Collection<CDPointDeControleEntity> cDPointsDeControleCDDemande) {
        CDPointsDeControleCDDemande = cDPointsDeControleCDDemande;
    }

    /**
     * Accesseur de cDEtapesCDDemande
     * 
     * @return le cDEtapesCDDemande
     */
    public Collection<CDEtapeEntity> getCDEtapesCDDemande() {
        return CDEtapesCDDemande;
    }

    /**
     * Affectation de cDEtapesCDDemande
     * 
     * @param cDEtapesCDDemande cDEtapesCDDemande à affecter
     */
    public void setCDEtapesCDDemande(Collection<CDEtapeEntity> cDEtapesCDDemande) {
        CDEtapesCDDemande = cDEtapesCDDemande;
    }

    /**
     * Accesseur de cPDemandesCDDemande
     * 
     * @return le cPDemandesCDDemande
     */
    public Collection<CPDemandeEntity> getCPDemandesCDDemande() {
        return CPDemandesCDDemande;
    }

    /**
     * Affectation de cPDemandesCDDemande
     * 
     * @param cPDemandesCDDemande cPDemandesCDDemande à affecter
     */
    public void setCPDemandesCDDemande(Collection<CPDemandeEntity> cPDemandesCDDemande) {
        CPDemandesCDDemande = cPDemandesCDDemande;
    }
}
